|
Server : LiteSpeed System : Linux host 5.15.0-161-generic #171-Ubuntu SMP Sat Oct 11 08:17:01 UTC 2025 x86_64 User : idnco5810 ( 1093) PHP Version : 8.2.29 Disable Function : NONE Directory : /usr/lib/python3/dist-packages/cloudinit/sources/__pycache__/ |
Upload File : |
o
쑛hv3 � @ s4 d dl Z d dlZd dlZd dlmZ d dlmZmZmZ d dl m
Z
d dlmZm
Z
mZmZmZ d dlmZ d dlmZ d dlmZ d d lmZ d d
lmZ d dlmZ e �e�ZdZG d
d� d�Z G dd� dej!�Z"G dd� de"�Z#dd� Z$dd� Z%dd� Z&de'fdd�Z(e#ej)ffe"ej)ej*ffgZ+dd� Z,dS )� N)�suppress)�gaierror�getaddrinfo� inet_ntoa)�pack)�dmi�net�performance�sources�subp)�
url_helper)�util)�dhcp)�NoDHCPLeaseError)�EphemeralIPNetwork)�ec2�
CloudStackc @ s6 e Zd ZdZdd� Zdd� Zejddd�d d
� �ZdS )�CloudStackPasswordServerClienta�
Implements password fetching from the CloudStack password server.
http://cloudstack-administration.readthedocs.org/
en/latest/templates.html#adding-password-management-to-your-templates
has documentation about the system. This implementation is following that
found at
https://github.com/shankerbalan/cloudstack-scripts/
blob/master/cloud-set-guest-password-debian
c C s
|| _ d S �N)�virtual_router_address)�selfr � r �H/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceCloudStack.py�__init__/ �
z'CloudStackPasswordServerClient.__init__c C s: t � ddddddddd d
�|�d�| j�g�\}}|�� S )N�wgetz--quietz--tries�3z --timeout�20z--output-document�-z--headerzDomU_Request: {0}z{0}:8080)r �formatr �strip)r �domu_request�output�_r r r �_do_request2 s
��z*CloudStackPasswordServerClient._do_requestzGetting password�always��log_modec C s4 | � d�}|dv rd S |dkrtd��| � d� |S )N�send_my_password)� �saved_password�bad_requestz-Error when attempting to fetch root password.r* )r$ �RuntimeError)r �passwordr r r �get_passwordG s
z+CloudStackPasswordServerClient.get_passwordN) �__name__�
__module__�__qualname__�__doc__r r$ r �timedr. r r r r r # s r c s� e Zd ZdZdZdZdZ� fdd�Zdd� Z d� fd d
� Z dd� Z
d
d� Zede
fdd��Zdd� Zejddd�dd� �Zdd� Zedd� �Z� ZS )�DataSourceCloudStackFr �x �2 c s2 t � �|||� tj�|jd�| _d| _i | _d S )N�cs�latest)�superr �os�path�join�seed_dir�api_ver�cfg)r �sys_cfg�distro�paths�� __class__r r r Z s
zDataSourceCloudStack.__init__c C s� t �d� t�d�}|r|S t �d� ttj�� t�� �| jd�}|r-|W d � S W d � n1 s7w Y t �d| jj j
� tt�� | jj �| jj
�}|�d�pYd}|W d � S 1 sfw Y t �d� dS )z�
Try obtaining a "domain-name" DHCP lease parameter:
- From systemd-networkd lease
- From dhclient lease
z.Try obtaining domain name from networkd leases�
DOMAINNAMEzHCould not obtain FQDN from networkd leases. Falling back to ISC dhclientzdomain-nameNzBCould not obtain FQDN from ISC dhclient leases. Falling back to %szNo dhcp leases found)�LOG�debugr �networkd_get_option_from_leasesr �NoDHCPLeaseMissingDhclientError�IscDhclient�get_key_from_latest_leaserA �dhcp_client�client_name�FileNotFoundError�get_newest_lease�fallback_interface�get)r �
domainname�domain_name�latest_leaser r r �_get_domainnameb s:
�����
� �
z$DataSourceCloudStack._get_domainnamec sn t � �|||�}|r5d|jvr5t�d� | �� }|r/|j� d|� �}t�d|� t�||j�S t�d|� |S )z�
Returns instance's hostname / fqdn
First probes the parent class method.
If fqdn is requested, and the parent method didn't return it,
then attach the domain-name from DHCP response.
�.zFQDN requestedzObtained the following FQDN: %szNCould not determine domain name for FQDN. Fall back to hostname as an FQDN: %s) r9 �get_hostname�hostnamerF rG rU r
�DataSourceHostname�
is_default)r �fqdn�
resolve_ip�
metadata_onlyrX rR rC r r rW � s
�z!DataSourceCloudStack.get_hostnamec C s� | � � }|jdkrdS t�| jd�g}t�� }tj||j|jt j
d�\}}|r1t �d|� t|�S t �d|t
t�� | �� t|�S )Nr Fzlatest/meta-data/instance-id)�urls�max_wait�timeout� status_cbzUsing metadata source: '%s'z>Giving up on waiting for the metadata from %s after %s seconds)�get_url_params�max_wait_seconds�uhelp�combine_url�metadata_address�time� monotonic�wait_for_url�timeout_secondsrF �warningrG �critical�int�bool)r �
url_paramsr^ �
start_time�url� _responser r r �wait_for_metadata_service� s.
��
� ��z.DataSourceCloudStack.wait_for_metadata_servicec C s | j S r )r? �r r r r �get_config_obj� s z#DataSourceCloudStack.get_config_obj�returnc C s t � S )z#Check if running on this datasource)�is_platform_viabler r r r � ds_detect� s zDataSourceCloudStack.ds_detectc
C sV i }t j|| jd d�r|d | _|d | _t�d| j� dS | jr3t� � }t�d|� t
| j|�}nt �� }zI|�< t
| j�}t|t�rJ|�d�n|| _| jsTtd ��d
| j� d�| _| �� sj W d � W dS | �� W d � W S 1 syw Y W d S ty� t�d|� Y dS ty� } zt�d
t|�� W Y d }~dS d }~ww )N�/)�basez user-dataz meta-dataz%Using seeded cloudstack data from: %sTzAttempting DHCP on: %s�dhcp-server-identifierzNo virtual router found!zhttp://Fz#Unable to obtain a DHCP lease on %sz$Failed fetching metadata service: %s)r
�read_optional_seedr= �userdata_raw�metadatarF rG �perform_dhcp_setupr �find_fallback_nicr rA �nullcontext�get_vr_address�
isinstance�dictrQ �vr_addrr, rf rs �_crawl_metadatar rk � Exception�str)r �seed_ret�primary_nic�network_contextr� �er r r � _get_data� sD
���(���zDataSourceCloudStack._get_datazCrawling metadatar% r&